Bring in after_read and before_write procedures for garmin devices.
authoroliskoli <oliskoli@f51c46e8-681c-474f-0cfe-069cfd0219fb>
Sun, 30 Apr 2006 16:40:14 +0000 (16:40 +0000)
committeroliskoli <oliskoli@f51c46e8-681c-474f-0cfe-069cfd0219fb>
Sun, 30 Apr 2006 16:40:14 +0000 (16:40 +0000)
gpsbabel/garmin_fs.c
gpsbabel/garmin_fs.h

index 14c4f4744aa8600473fe37451a8fa023618a5704..91858f3dfe53942192be5da13b9c31969b2d85a4 100644 (file)
@@ -252,3 +252,56 @@ garmin_fs_merge_category(const char *category_name, waypoint *waypt)
        GMSD_SET(category, cat);
        return 1;
 }
+
+void 
+garmin_fs_garmin_after_read(const GPS_PWay way, waypoint *wpt, const int protoid)
+{
+       garmin_fs_t *gmsd = NULL;
+       
+       gmsd = garmin_fs_alloc(protoid);
+       fs_chain_add(&wpt->fs, (format_specific_data *) gmsd);
+       
+       /* nothing happens until gmsd is allocated some lines above */
+
+       /* !!! class needs protocol specific conversion !!! (ToDo)
+       GMSD_SET(wpt_class, way[i]->wpt_class);
+       */
+       /* flagged data fields */
+       GMSD_SET(display, gt_switch_display_mode_value(way->dspl, gps_waypt_type, 1));
+       if (way->category != 0) GMSD_SET(category, way->category);
+       if (way->dst < 1.0e25f) GMSD_SET(proximity, way->dst);
+       if (way->temperature_populated) GMSD_SET(temperature, way->temperature);
+       if (way->dpth < 1.0e25f) GMSD_SET(depth, way->dpth);
+       GMSD_SETNSTR(cc, way->cc, sizeof(way->cc));
+       GMSD_SETNSTR(state, way->state, sizeof(way->state));
+       GMSD_SETSTR(city, way->city);
+       GMSD_SETSTR(facility, way->facility);
+       GMSD_SETSTR(cross_road, way->cross_road);
+       GMSD_SETSTR(addr, way->addr);
+}
+
+void 
+garmin_fs_garmin_before_write(const waypoint *wpt, GPS_PWay way, const int protoid)
+{
+       garmin_fs_t *gmsd = GMSD_FIND(wpt);
+       
+       if (gmsd == NULL) return;
+
+       /* ToDo: protocol specific conversion of class
+       way[i]->wpt_class = GMSD_GET(wpt_class, way[i]->wpt_class); 
+               */
+       way->dspl = gt_switch_display_mode_value(
+               GMSD_GET(display, way->dspl), gps_waypt_type, 0);
+       way->category = GMSD_GET(category, way->category);
+       way->dpth = GMSD_GET(depth, way->dpth);
+       way->dst = GMSD_GET(proximity, way->dpth);
+       way->temperature = GMSD_GET(temperature, way->temperature);
+       
+       GMSD_GETNSTR(cc, way->cc, sizeof(way->cc));
+       GMSD_GETNSTR(city, way->city, sizeof(way->city));
+       GMSD_GETNSTR(state, way->state, sizeof(way->state));
+       GMSD_GETNSTR(facility, way->facility, sizeof(way->facility));
+       GMSD_GETNSTR(cross_road, way->cross_road, sizeof(way->cross_road));
+       GMSD_GETNSTR(addr, way->addr, sizeof(way->addr));
+}
+
index 0c85b44195316d577c91163e1992bc2c1ee4091d..672d3e1c17b8ce84bfd4984685ce9571e055d133 100644 (file)
@@ -25,6 +25,7 @@
 
 #include <ctype.h>
 #include "defs.h"
+#include "jeeps/gps.h"
 
 /* this order is used by most devices */
 /* typedef enum {
@@ -117,4 +118,7 @@ unsigned char garmin_fs_merge_category(const char *category_name, waypoint *wayp
 
 #define GMSD_SECTION_CATEGORIES "Garmin Categories"
 
+void garmin_fs_garmin_after_read(const GPS_PWay way, waypoint *wpt, const int protoid);
+void garmin_fs_garmin_before_write(const waypoint *wpt, GPS_PWay way, const int protoid);
+
 #endif